Programmable logic devices (PLDs) exist as a well-known type of integrated circuit (IC) that may be programmed by a user to perform specified logic functions. There are different types of programmable logic devices, such as programmable logic arrays (PLAs) and complex programmable logic devices (CPLDs). One type of programmable logic device, called a field programmable gate array (FPGA), is very popular because of a superior combination of capacity, flexibility, time-to-market, and cost.
An FPGA typically includes an array of configurable logic blocks (CLBs) surrounded by a ring of programmable input/output blocks (IOBs). The CLBs and IOBs are interconnected by a programmable interconnect structure. The CLBs, IOBs, and interconnect structure are typically programmed by loading a stream of configuration data (bitstream) into internal configuration memory cells that define how the CLBs, IOBs, and interconnect structure are configured. The configuration bitstream may be read from an external memory, conventionally an external integrated circuit memory EEPROM, EPROM, PROM, and the like, though other types of memory may be used. The collective states of the individual memory cells then determine the function of the FPGA.
It is often desirable to manufacture FPGAs having custom logic functions specific to a particular customer application. Conventional FPGAs are only customizable through programming (i.e., software). Thus, a manufacturer desiring to implement custom logic functions within an FPGA for a particular customer conventionally implements the custom logic functions in the form of software by using CLBs, IOBs, and the programmable interconnect structure. Unless the software-based custom logic function is encrypted, an engineer having skill in the art may reverse-engineer the software-based custom logic function. Moreover, the bitstream used to configure the FPGA with the software-based custom logic function is susceptible to unauthorized use. For example, the bitstream for implementing a software-based custom logic function may be used to configure PLDs other than those authorized. Furthermore, to maintain the security of the software-based custom logic function, the software must remain physically disjoint from the customer's design, must be separately encrypted from the customer's design, and may not be partially overwritten by the customer's design. Current FPGAs do not support these constraints.
Therefore, there exists a need in the art for design and production of a custom programmable logic device without implementation of software-based custom logic functions.